class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        // set数据结构自动排序，查重
        set<int> s(nums.begin(), nums.end());
        // 特殊情况：数组为空
        if (s.empty()) {
            return 0;
        }

        int before = INT_MIN;
        int maxLen = 0;
        int len = 1;
        // 思想是：获得一个排序查重了的集合，从头到尾遍历这个集合，来查找最长连续序列
        for (auto it = s.begin(); it != s.end(); ++it) {
            // 如果连续就一直查
            if (before + 1 == *it) {
                ++len;
            } else { // 如果不连续就保存当前结果
                maxLen = max(maxLen, len);
                len = 1;
            }
            before = *it;
        }
        // 遍历完成也要保存一次结果
        maxLen = max(maxLen, len);
        return maxLen;
    }
};